package tasks.leetcode.身高排序问题;

import java.util.*;

public class TakHeight {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] info = scanner.nextLine().split("\\s");
        if (info.length != 2) {
            return;
        }
        int height = Integer.parseInt(info[0]);
        int n = Integer.parseInt(info[1]);

        String[] stringHeightArray = scanner.nextLine().split("\\s");
        if (stringHeightArray.length != n) {
            return;
        }

        List<Integer> heightList = new ArrayList<>();
        for (int i = 0; i < stringHeightArray.length; i++) {
            heightList.add(Integer.parseInt(stringHeightArray[i]));
        }

        /**
         * 输出排序结果，各正整数以空格分割
         * 和小明身高差绝对值最小的小朋友排在前面
         * 和小明身高差绝对值最大的小朋友排在后面
         * 如果两个小朋友和小明身高差一样
         * 则个子较小的小朋友排在前面
         */
        Collections.sort(heightList, new Comparator<Integer>() {
            @Override
            public int compare(Integer h1, Integer h2) {
                int absH1 = Math.abs(h1 - height);
                int absH2 = Math.abs(h2 - height);
                if (absH1 == absH2) {
                    return h1-h2; // 身高矮的放在前面-倒序
                } else {
                    return absH1 - absH2; // 绝对值小的放在前面-倒序
                }
            }
        });

        for (Integer integer : heightList) {
            System.out.print(integer);
            System.out.print(" ");
        }
    }
}
